#pragma once
#include "prs_Data.h"

namespace prs {
///////////////////////////////////////////////////////////////////////////////
struct TDataRegTables;
///////////////////////////////////////////////////////////////////////////////

struct TDataRegTablesRecord : public TDataTypedRecordBase
{
	TDataRegTables &dataRegTables;
	//
	TDataRegTablesRecord(TDataRegTables &RegTables);
	TDataRegTablesRecord(TDataRegTablesRecord &DataRegTablesRecord);
	//
	void operator = (const TDataRegTablesRecord &From) {
		record = From.record;
	}
	//
	virtual TTableId  GetTableId() const;
	virtual TRecordId GetRecordId() const { return record->RecordId;}
	//
	TDataRegTablesRecord &SetValueTableId(const TTableId &Value);
	TTableId GetValueTableId();

private:
	TDataTableRecord *record;
	friend TDataRegTables;
};

///////////////////////////////////////////////////////////////////////////////

struct TDataRegTables : public TDebug
{
	TDataRegTables(
	  TDataTables &Tables,
	  const TTableId &TableId
	);
  //
  TDataTable *GetTable() { return table;}
	//
	TDataRegTablesRecord AddRecord();
	TDataRegTablesRecord GetRecord(const TRecordId &RecordId);

private:
  TDataTables &tables;
  TDataTable *table;
  svl::TString tableIdFieldId;
  friend TDataRegTablesRecord;
};

///////////////////////////////////////////////////////////////////////////////
}
